#include <stdio.h>
#include <algorithm>
using namespace std;

int n, m, v;
int edges[100010][2];
int cont;
int isolado;

int main() {
	scanf("%d %d %d", &n, &m, &v);
	
	if (m>((n*n-3*n+4)/2) || m<(n-1)) {
		printf("-1\n"); //grafo nao conexo ou grafo tem mais arestas
				//do que o maximo possivel para que a ponte
				//possa ser criada, que e um grafo completo
				//menos n-2 ligacoes para um vertice que nao
				//seja v (o que vai torna-lo isolado se v
				//deixar de existir   
		return 0;
	}
	
	v--;

	cont=0;

	for (int i=0; i<n; i++) {
		if (i!=v) {
			edges[cont][0]=v;
			edges[cont][1]=i;
			cont++;
		}
	}

	if (cont==m) {
		for (int i=0; i<cont; i++) {
			printf("%d %d\n", edges[i][0]+1, edges[i][1]+1);
		}

		return 0;
	}

	isolado=0;

	if (v==0) {	
		isolado=1;
	}

	for (int i=0; i<n; i++) {
		for (int j=0; j<n; j++) {
			if (i>=j) continue;
			if (i!=v && i!=isolado && j!=v && j!=isolado) {
				edges[cont][0]=i;
				edges[cont][1]=j;
				cont++;
			}

			if (cont==m)
				break;
		}

		if (cont==m) break;
	}

	for (int i=0; i<cont; i++) {
		printf("%d %d\n", edges[i][0]+1, edges[i][1]+1);
	}

	return 0;
}
